#include<stdio.h>
#include<stdlib.h>

#define MAX_LEN 20

typedef int StackDataType;
typedef struct sqstack
{
    StackDataType *data;
    int top;
}Stack;

Stack *InitStack()
{
    Stack *s=malloc(sizeof(Stack));
    s->data=malloc(sizeof(StackDataType)*MAX_LEN);
    s->top=-1;
}

int push(Stack *s,StackDataType data)
{
    if(s==NULL||s->data==NULL||s->top==MAX_LEN-1)
    {
        printf("push error\n");
        return 0;
    }
    s->top++;
    s->data[s->top]=data;
    return 1;
}

int pop(Stack *s,StackDataType *data)
{
    if(s==NULL||s->data==NULL||s->top==-1)
    {
        printf("pop error\n");
        return 0;
    }
    *data=s->data[s->top];
    s->top--;
    return 1;
}

int GetTop(Stack *s,StackDataType *data)
{
    if(s==NULL||s->data==NULL||s->top==-1)
    {
        printf("GetTop error\n");
        return 0;
    }
    *data=s->data[s->top];
    return 1;
}

int DestroyStack(Stack *s)
{
    if(s==NULL||s->data==NULL)
    {
        return 0;
    }
    free(s->data);
    s->data=NULL;
    s->top=-1;
    free(s);
    return 1;
}

int ClearStack(Stack *s)
{
    if(s==NULL||s->data==NULL)
    {
        return 0;
    }
    s->top=-1;
    return 1;
}

void PrintStack(Stack *s)
{
    if(s==NULL||s->data==NULL)
    {
        printf("栈为空\n");
        return;
    }
    printf("栈的内容：\n");
    for(int i=0;i<=s->top;i++)
    {
        printf("%d ",s->data[i]);
    }
    printf("\n");
}

int main()
{
    Stack *s=InitStack();
    StackDataType pop_data;
    push(s,1);
    push(s,2);
    push(s,3);
    push(s,4);
    push(s,5);
    push(s,6);
    push(s,7);
    pop(s,&pop_data);
    pop(s,&pop_data);
    pop(s,&pop_data);
    printf("最后出栈数据：%d\n",pop_data);
    push(s,999);
    GetTop(s,&pop_data);
    printf("栈顶数据：%d\n",pop_data);
    PrintStack(s);
    DestroyStack(s);
    PrintStack(s);
}